Programmatically closing a dialog box - win32 [migrated]
Posted
by
user1697579
on Programmers
See other posts from Programmers
or by user1697579
Published on 2012-10-01T14:15:35Z
Indexed on
2012/10/01
15:52 UTC
Read the original article
Hit count: 172
I'm working on an application to detect a pop-up dialog and then automatically dismiss it. I'm writing this as a C++/Win32 app. The dialog box is generated by IE 7 and I can detect the window, but several methods to get the OK button to "click" have failed.
Doing searches for other people's solutions, sending these messages to the button handle seems to have worked in a lot of situations:
PostMessage( handle, WM_LBUTTONDOWN, 0, 0 );
PostMessage( handle, WM_LBUTTONUP, 0, 0 );
PostMessage( handle, BM_SETSTATE, 1, 0 );
It has no effect on the button state in my tests though.
I can send tab characters to the main window and see that the OK button gets focus, but then sending return characters does nothing.
To learn more about this I used Spy++ to get information about the window hierarchy and what messages are delievered when I manually click the OK button.
Looking at the message log and reading about WM_MOUSEACTIVATE seamed to offer a solution. The log info shows that 0002166C was the button window. So in my code I tried this:
GetClassNameA( handle, str, str_size );
if( strcmp( str, "Internet Explorer_Server" ) != 0 )
return TRUE; // Not the window we're interested in.
// Send a message to activate the button window and have it process a mouse click.
PostMessage( handle, WM_MOUSEACTIVATE, (WPARAM) dialog_handle, MAKELPARAM( HTCLIENT, WM_LBUTTONDOWN );
Based on the window hierarchy and message log, I think the window with the class name "Internet Explorer_Server" is the button. Maybe I'm wrong, because it does seem like an odd class name for a button...
Below is a link to the window hierarchy image, message log when I manually click the OK button. Last is the code that's executed on a 1 second timer ticket, looking for the window.
Any insight and help is appreciated!
Image of the window hierarchy, source, window messages, and test dialog source are available here:
https://sites.google.com/site/matthewmillersmiscellanea/Home/
© Programmers or respective owner